Skip to content

fix(lark): mirror terminal App failures to the original chat - #8281

Merged
huangruiteng merged 1 commit into
mainfrom
codex/steward-app-lark-sync-20261107
Nov 8, 2026
Merged

huangruiteng merged 1 commit into
mainfrom
codex/steward-app-lark-sync-20261107

Conversation

@loopx-agent

Copy link
Copy Markdown
Collaborator

已连接飞书的 App 会话会同步用户输入和正常答复,但原 Turn 失败时,飞书只看得到问题。历史扫描也会跳过这些已经存在的失败记录。

App → 飞书复用原会话和投递队列:按原 Turn、终态和精确匹配的错误记录投递一条安全提示,带原结束时间,诊断详情仍留在 App。已投递的输入会保留原回执;重启后先读回旧投递。撤权后停止投递,历史补齐不会重新执行原请求。

验证:旧版复现漏发;新版隔离测试覆盖补发、重启后读回同一回执、撤权、过时错误与重复错误记录。精确提交的 9 项 App 投影回归及 quick premerge 均通过。真实安装和原私聊验收仍待合并后进行。

Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>

@loopx-agent loopx-agent left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approval conclusion (author-owned PR; GitHub blocks formal self-approval)

Reviewer: model_agent, GPT-6 family, OpenAI, self_reported

Reviewed head 18488a3c9ebd053bdbf4484895046ff72c30b969

动机 / Motivation

用户在已连接飞书的 App 私聊提交任务时,原 Turn 有时会在模型错误、执行器故障或服务重启后失败。旧版把输入同步到飞书,却跳过 App 里的失败记录。用户在原私聊只看到问题,只能回 App 才知道这轮没有完成。新版把与原 Turn 精确匹配的终态提示送回同一个飞书私聊,保留原结束时间。隔离测试验证了历史输入补齐一次失败提示,已有输入没有重复发送。

本次交付是已有授权下的 App 到飞书失败状态同步。继续原业务、其他失败类型的续办、群聊和扩大授权分别由原路径处理。合并及安装后,还需要用真实原 Bot 的送达回执逐条独立读回;隔离通过未证明线上已补齐。

改动思路 / Approach

发现和发送共用一次消息资格规则,既有投递队列负责发送及收据,已有连接规则决定受众;这样无需写回会话或增加消费者。仅补 App 来源、确有终态错误记录的同源私聊投影。 直接转发原始错误会把诊断带出 App,还会把未确认的停止当成最终结果。只在已经有原输入、原 Turn 和终态错误三者的对应证据时生成安全正文。每次发送和恢复之前照常复核原来源与当前授权,失败后的业务执行仍由 Core 原有路径负责。

具体改动 / Changes

关键代码讲解

  • _web_projection_paths 在原私聊授权仍启用时扫描已有记录,发现新资格后重开原投递队列,已核验的输入阶段保持原样。
  • _web_projection_transcript 用同一 Session 和 Turn 找到 App 输入;只有终态、精确错误行和结束时间一致才派生失败提示。跳过未确认停止和重复错误,诊断留在 App。
  • _web_projection_messages 核对持久原来源、会话与当前绑定后才给出投递正文,输入反馈仍只读取用户输入。
  • _reconcile_web_projection 沿原消息 ID、幂等键、来源校验和投递收据继续。已知的旧投递先读回,撤权后停止。

按原 RFC docs/architecture/rfcs/app-conversation-and-async-inbox-v0.md(基线 172d80d630f424b0b44dd513863ba02b5f13d55c)核对:same-private-source 和 stable-projection-receipt 已实现并有测试,live-installed-delivery 留待采用后验收。同步更新中英文契约;生产 36 增 22 删,测试增 79 行,RFC 增 10 行。

对主干的风险 / Risks

主要风险是上次已写入飞书却暂时读不到收据,服务重启后再发同一提示。隔离用例验证恢复沿原 locator 读回,原输入收据不变,总计只新增一次投递;撤权场景没有写入。测试也覆盖正常答复、独立 Session、原反馈、旧停止和重复错误记录。旧版使用同一回归用例等不到失败投递,当前 head 可以读回。默认只作用于已连接的原私聊,继续使用原 Core 生命周期、投递 fence 和 provider 读回。

语义与 CI 对齐

复用已有 Turn 终态、失败类别和 outbox 消息身份。精确 head 的 9 个 App 投影回归及 quick premerge 为 PASS;真实安装和飞书回传为 UNVERIFIED。远端检查由合并门单独处理。

我的整体评价 / Verdict

长期可恢复性和用户体验都有明确增量:原历史可以自然补齐,用户可按原时间辨认失败记录。该变更复用了唯一投递队列,保留原授权和已冻结的回执,影响范围与缺口匹配。现有 App UI、飞书消息布局和交互组件不变;验证范围是私聊正文、时间、消息身份及回执。 实际上线仍需维护者批准和原服务采用,随后逐条验收原私聊收据。

English verdict: APPROVE. The reviewed head mirrors an exact App failure once in the original private chat and verifies the same receipt after recovery; live adoption remains unverified.

@huangruiteng
huangruiteng merged commit 15467f2 into main Nov 8, 2026
24 of 42 checks passed
@huangruiteng
huangruiteng deleted the codex/steward-app-lark-sync-20261107 branch November 8, 2026 05:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants